目录
基于5台linux虚拟机搭建HDFS HA高可用集群
hdfs集群部署规划
准备5台linux虚拟机
安装virtual box
解决VirtualBox无法显示鼠标问题
在Virtual box上配置NAT+Host Only网络
关闭防火墙
添加NAT网络
配置虚拟机网卡
配置网络
动态分配一个ip地址
设置静态ip地址
配置DNS
检查NetManager的状态
检查NetManager管理的网络接口
检查NetManager管理的网络连接
设置dns
让dns配置生效
设置静态、瞬态或灵活主机名,分别使用–static,–transient或–pretty选项
重启CentOS 7之后,查看主机名
测试网络通信情况
配置Host Only
配置虚拟机网卡
在宿主机查看Host ONly网卡的网关
虚拟机中查看网络状态
配置hosts(配置本机的hostname到ip地址的映射)
配置Xshell
配置yum
安装JDK
将jdk-8u131-linux-x64.rpm通过WinSCP上传到虚拟机中
安装JDK
配置jdk相关的环境变量
测试jdk安装是否成功
在另外4个虚拟机中安装CentOS集群
在hadoop01的操作
在hadoop02操作
更改用户名
更改ifcfg-enp0s3网卡静态IP
更改ifcfg-enp0s8网卡静态IP
在hadoop03操作
更改用户名
更改ifcfg-enp0s3网卡静态IP
更改ifcfg-enp0s8网卡静态IP
在hadoop04操作
更改用户名
更改ifcfg-enp0s3网卡静态IP
更改ifcfg-enp0s8网卡静态IP
在hadoop05操作
更改用户名
更改ifcfg-enp0s3网卡静态IP
更改ifcfg-enp0s8网卡静态IP
连接5台虚拟机
配置5台CentOS为ssh免密码互相通信
同步集群时间
使用yum安装ntpdate
设置定时同步时间
hdfs HA集群部署规划
部署zookeeper集群
在五台机器上创建目录
下载zookeeper 3.4.9
解压压缩文件
设置Zookeeper环境变量
编辑zoo.cfg配置文件
将zk安装目录传送至hadoop04
在hadoop04上操作
将zk安装目录传送至hadoop05
在hadoop05上操作
三台机器上执行
查看集群状态
部署hadoop集群
先在hadoop01上操作
配置环境变量
编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件
编辑$HADOOP_HOME/etc/hadoop/core-site.xml文件
编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件
编辑slaves文件
拷贝hadoop到其他4台机器上
启动hadoop集群
在hadoop03、hadoop04、hadoop05上启动journal nodes集群[这步可省略]
格式化namenode(hadoop01上执行)
格式化ZKFC(hadoop01上执行)
启动hdfs集群(hadoop01上执行)
查看hadoop集群
hdfs集群部署规划
准备5台linux虚拟机 都是CentOS 7操作系统,64位,每台机器都是单cpu,1G内存,安装JDK 1.8
启动一个virtual box虚拟机管理软件(vmware,发现不太稳定,主要是当时搭建一个hadoop大数据的集群,发现每次休眠以后再重启,集群就挂掉了)
virtual box,发现很稳定,集群从来不会随便乱挂,所以就一直用virtual box了
安装virtual box 用的是什么centos镜像,CentOS比较新的版本是7了,然后服务器上装操作系统的话,内存一般比较大,一般是安装64位的,32位的有一个最大内存4G的限制
(1)使用提供的CentOS 7镜像即可,CentOS-7-x86_64-Minimal-1611.iso。
(2)创建虚拟机:打开Virtual Box,点击”新建”按钮,点击”下一步”,输入虚拟机名称为hadoop01,选择操作系统为Linux,选择版本为Red Hat-64bit,分配1024MB内存,后面的选项全部用默认,在Virtual Disk File location and size中,一定要自己选择一个目录来存放虚拟机文件,最后点击”create”按钮,开始创建虚拟机。
(3)设置虚拟机网卡:选择创建好的虚拟机,点击”设置”按钮,在网络一栏中,连接方式中,选择”Bridged Adapter”。
(4)安装虚拟机中的CentOS 7操作系统:选择创建好的虚拟机,点击”开始”按钮,选择安装介质(即本地的CentOS 7镜像文件),按照课程选择后自动安装即可
(5)安装完以后,CentOS会提醒你要重启一下,就是reboot,你就reboot就可以了。
(6)配置网络
解决VirtualBox无法显示鼠标问题
将Pointing Device改为USB Tablet
在Virtual box上配置NAT+Host Only网络
注意:在公司wifi下用桥接模式,可能会出现某些ip无法远程连接的情况【这些ip可能已经被分配了】
一般我们给虚拟机设置网络都用NAT模式
关闭防火墙 1 2 3 systemctl status firewalld.service systemctl stop firewalld.service systemctl disable firewalld.service
添加NAT网络
网段自己设定,用前24位作为网段地址,意味着子网掩码是255.255.255.0
配置虚拟机网卡
配置网络 动态分配一个ip地址 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
设置静态ip地址 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s3 DEVICE=enp0s3 ONBOOT=yes IPADDR=10.0.2.180 NETMASK=255.255.255.0 GATEWAY=10.0.2.1
配置DNS 检查NetManager的状态 1 systemctl status NetworkManager.service
检查NetManager管理的网络接口
检查NetManager管理的网络连接
设置dns 1 nmcli con mod enp0s3 ipv4.dns "114.114.114.114 8.8.8.8"
让dns配置生效
设置静态、瞬态或灵活主机名,分别使用–static,–transient或–pretty选项 1 2 3 4 5 6 7 [root@localhost ~] [root@localhost ~] hadoop01 [root@localhost ~] hadoop01 [root@localhost ~] hadoop01
重启CentOS 7之后,查看主机名 1 2 [root@hadoop01 ~] hadoop01
测试网络通信情况
配置Host Only
配置虚拟机网卡
在宿主机查看Host ONly网卡的网关 1 2 3 4 sparsematrix:~ matrix$ ifconfig vboxnet0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 ether 0a:00:27:00:00:00 inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255
虚拟机中查看网络状态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@hadoop01 ~] 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:0d:44:d9 brd ff:ff:ff:ff:ff:ff inet 10.0.2.233/24 brd 10.0.2.255 scope global enp0s3 valid_lft forever preferred_lft forever inet6 fe80::6f39:ac6d:c0ab:b93c/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:89:af:d1 brd ff:ff:ff:ff:ff:ff inet 192.168.56.101/24 brd 192.168.56.255 scope global dynamic enp0s8 valid_lft 1037sec preferred_lft 1037sec inet6 fe80::2bdc:e63a:1310:3c57/64 scope link valid_lft forever preferred_lft forever
可以看到网卡2的配置文件名为enp0s8,但这个文件并不存在,需要手动创建,可以直接复制enp0s3文件,文件名为enp0s8,打开enp0s8进行修改。
编辑ifcfg-enp0s8网卡
修改NAME、DEVICE
删除UUID
修改IPADDR、GATEWAY为Host Only网卡对应地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@hadoop01 ~] TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s8 DEVICE=enp0s8 ONBOOT=yes DNS1=114.114.114.114 DNS2=8.8.8.8 IPADDR=192.168.56.180 PREFIX=24 GATEWAY=192.168.56.1
配置hosts(配置本机的hostname到ip地址的映射) 1 2 [root@hadoop01 ~] 192.168.56.180 hadoop01
配置Xshell 此时就可以使用Xshell从本机连接到虚拟机进行操作了
一般来说,虚拟机管理软件,virtual box,可以用来创建和管理虚拟机
但是一般不会直接在virtualbox里面去操作,因为比较麻烦,没有办法复制粘贴
Xshell,在windows宿主机中,去连接virtual box中的虚拟机
关闭windows的防火墙
后面要搭建集群,有的大数据技术的集群之间,在本地你给了防火墙的话,可能会没有办法互相连接,会导致搭建失败
配置yum 1 2 3 yum clean all yum makecache yum install wget
安装JDK 将jdk-8u131-linux-x64.rpm通过WinSCP上传到虚拟机中 1 scp -C -r jdk-8u131-linux-x64.rpm root@192.168.56.180:/root
安装JDK 1 rpm -ivh jdk-8u131-linux-x64.rpm
配置jdk相关的环境变量 1 2 3 4 [root@hadoop01 ~] export JAVA_HOME=/usr/java/latestexport PATH=$PATH :$JAVA_HOME /bin[root@hadoop01 ~]
测试jdk安装是否成功 1 2 3 4 [root@hadoop01 ~]# java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8 .0 _131-b11) Java HotSpot (TM) 64-Bit Server VM (build 25.131 -b11, mixed mode)
在另外4个虚拟机中安装CentOS集群 按照上述步骤,再安装四台一模一样环境的linux机器
另外四台机器的hostname分别设置为hadoop02,hadoop03,hadoop04,hadoop05
安装好之后,在每台机器的hosts文件里面,配置好所有的机器的ip地址到hostname的映射关系
在hadoop01的操作
1 2 3 4 5 192.168.56.180 hadoop01 192.168.56.181 hadoop02 192.168.56.182 hadoop03 192.168.56.183 hadoop04 192.168.56.184 hadoop05
1 2 [root@hadoop01 ~] Restarting network (via systemctl): [ OK ]
在hadoop02操作 更改用户名 1 hostnamectl set -hostname hadoop02
更改ifcfg-enp0s3网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改IPADDR的同时,需要删除UUID
更改ifcfg-enp0s8网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
修改IPADDR的同时,需要删除UUID
在hadoop03操作 更改用户名 1 hostnamectl set -hostname hadoop03
更改ifcfg-enp0s3网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改IPADDR的同时,需要删除UUID
更改ifcfg-enp0s8网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
修改IPADDR的同时,需要删除UUID
在hadoop04操作 更改用户名 1 hostnamectl set -hostname hadoop04
更改ifcfg-enp0s3网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改IPADDR的同时,需要删除UUID
更改ifcfg-enp0s8网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
修改IPADDR的同时,需要删除UUID
在hadoop05操作 更改用户名 1 hostnamectl set -hostname hadoop05
更改ifcfg-enp0s3网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改IPADDR的同时,需要删除UUID
更改ifcfg-enp0s8网卡静态IP 1 vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
修改IPADDR的同时,需要删除UUID
连接5台虚拟机
配置5台CentOS为ssh免密码互相通信
在5台机器上配置对本机的ssh免密码登录
生成本机的公钥,过程中不断敲回车即可,ssh-keygen命令默认会将公钥放在/root/.ssh目录下
配置本机免密码登录
1 2 cd /root/.sshcp id_rsa.pub authorized_keys
1 2 [root@hadoop01 ~] [root@hadoop01 .ssh]
1 2 [root@hadoop02 ~] [root@hadoop02 .ssh]
1 2 [root@hadoop03 ~] [root@hadoop03 .ssh]
1 2 [root@hadoop04 ~] [root@hadoop04 .ssh]
1 2 [root@hadoop05 ~] [root@hadoop05 .ssh]
将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了
配置五台机器互相之间的ssh免密码登录
使用ssh-copy-id -i hostname命令将本机的公钥拷贝到指定机器的authorized_keys文件中
1 2 3 4 [root@hadoop01 ~] [root@hadoop01 ~] [root@hadoop01 ~] [root@hadoop01 ~]
1 2 3 4 [root@hadoop02 ~] [root@hadoop02 ~] [root@hadoop02 ~] [root@hadoop02 ~]
1 2 3 4 [root@hadoop03 ~] [root@hadoop03 ~] [root@hadoop03 ~] [root@hadoop03 ~]
1 2 3 4 [root@hadoop04 ~] [root@hadoop04 ~] [root@hadoop04 ~] [root@hadoop04 ~]
1 2 3 4 [root@hadoop05 ~] [root@hadoop05 ~] [root@hadoop05 ~] [root@hadoop05 ~]
同步集群时间 使用yum安装ntpdate
设置定时同步时间
1 */10 * * * * /usr/sbin/ntpdate time.nist.gov
hdfs HA集群部署规划 namenode,就相当于是在eclipse中新建一个工程,取个名字叫做namenode,在工程里面开发代码,写好代码之后,就可以打包,在linux服务器上,用java -jar给他启动,namenode就是这个意思
namenode就是一个java工程,写完里面的代码,打包,在linux上部署,java -jar启动,出来一个进程,namenode其实就是一个系统,启动的时候就是一个进程
1 2 3 4 5 hadoop01:active namenode,ZKFC hadoop02:standby namenode,ZKFC hadoop03:datanode,journal node,QuorumPeerMain hadoop04:datanode,journal node,QuorumPeerMain hadoop05:datanode,journal node,QuorumPeerMain
部署zookeeper集群 在hadoop03、hadoop04、hadoop05三台机器上部署zookeeper
在五台机器上创建目录 1 mkdir -p /usr/local /program/service
下载zookeeper 3.4.9 下载到/usr/local/program/service目录下
1 2 [root@hadoop03 ~] [root@hadoop03 service]
解压压缩文件 1 2 [root@hadoop03 ~] [root@hadoop03 service]
设置Zookeeper环境变量
1 2 export ZOOKEEPER_HOME=/usr/local /program/service/zookeeper-3.4.9export PATH=$PATH :$ZOOKEEPER_HOME /bin
编辑zoo.cfg配置文件 1 2 [root@hadoop03 ~] [root@hadoop03 ~]
1 2 3 4 5 dataDir=/usr/local /program/data/zookeeper dataLogDir=/usr/local /program/log /zookeeper server.1=hadoop03:2888:3888 server.2=hadoop04:2888:3888 server.3=hadoop05:2888:3888
1 2 3 4 mkdir -p /usr/local /program/data/zookeeper mkdir -p /usr/local /program/log /zookeeper cd /usr/local /program/data/zookeeperecho 1 > myid
将zk安装目录传送至hadoop04 1 2 [root@hadoop03 ~] [root@hadoop03 ~]
在hadoop04上操作 1 2 3 4 5 [root@hadoop04 ~] [root@hadoop04 ~] [root@hadoop04 ~] [root@hadoop04 ~] [root@hadoop04 ~]
将zk安装目录传送至hadoop05 1 2 [root@hadoop03 ~] [root@hadoop03 ~]
在hadoop05上操作 1 2 3 4 5 [root@hadoop05 ~] [root@hadoop05 ~] [root@hadoop05 ~] [root@hadoop05 ~] [root@hadoop05 ~]
三台机器上执行
查看集群状态
1 2 3 [root@hadoop03 zookeeper] 2550 Jps 2539 QuorumPeerMain
1 2 3 [root@hadoop04 zookeeper] 2594 QuorumPeerMain 2619 Jps
1 2 3 [root@hadoop05 zookeeper] 2508 QuorumPeerMain 2540 Jps
部署hadoop集群 先在hadoop01上操作 1 tar -zxf hadoop-2.9.1.tar.gz -C /usr/local /program/service/
配置环境变量
1 2 3 export JAVA_HOME=/usr/java/latestexport HADOOP_HOME=/usr/local /program/service/hadoop-2.9.1export PATH=$PATH :$JAVA_HOME /bin:$HADOOP_HOME /bin
编辑$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件 1 vim $HADOOP_HOME /etc/hadoop/hadoop-env.sh
1 export JAVA_HOME=/usr/java/latest
编辑$HADOOP_HOME/etc/hadoop/core-site.xml文件 1 vim $HADOOP_HOME /etc/hadoop/core-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ns1/</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local /program/service/hadoop-2.9.1/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value> </property> </configuration>
编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件 1 vim $HADOOP_HOME /etc/hadoop/hdfs-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 <configuration> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>hadoop01:9000</value> </property> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop01:50070</value> </property> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop02:9000</value> </property> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop02:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns1</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local /program/service/hadoop-2.9.1/journaldata</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true </value> </property> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true ) </value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
编辑slaves文件 1 vi $HADOOP_HOME /etc/hadoop/slaves
1 2 3 hadoop03 hadoop04 hadoop05
上面其实就已经将active namenode给配置好了
拷贝hadoop到其他4台机器上 1 2 3 4 scp -r /usr/local /program/service/hadoop-2.9.1 hadoop02:/usr/local /program/service scp -r /usr/local /program/service/hadoop-2.9.1 hadoop03:/usr/local /program/service scp -r /usr/local /program/service/hadoop-2.9.1 hadoop04:/usr/local /program/service scp -r /usr/local /program/service/hadoop-2.9.1 hadoop05:/usr/local /program/service
配置环境变量
启动hadoop集群 在hadoop03、hadoop04、hadoop05上启动journal nodes集群[这步可省略] 1 $HADOOP_HOME /sbin/hadoop-daemon.sh start journalnode
格式化namenode(hadoop01上执行)
1 scp -r /usr/local /program/service/hadoop-2.9.1/tmp root@hadoop02:/usr/local /program/service/hadoop-2.9.1/
1 hdfs namenode -bootstrapStandby
格式化ZKFC(hadoop01上执行)
启动hdfs集群(hadoop01上执行) 1 $HADOOP_HOME /sbin/start-dfs.sh
这个脚本会自动在hadoop01和hadoop02上启动一个namenode,同时启动一个ZKFC,然后会自动在hadoop03、hadoop04、hadoop05上分别启动一个datanode
查看hadoop集群 在hadoop01和hadoop02访问50070端口即可